/* 扫描器类 */

export default class Scanner {
  constructor(templateStr) {
    this.templateStr = templateStr
    // 指针
    this.pos = 0
    // 剩余文字
    this.tail = templateStr
  }

  // 跳过指定标志
  scan(skipTag) {
    if (this.tail.indexOf(skipTag) == 0) {
      this.pos += skipTag.length
      this.tail = this.templateStr.substr(this.pos)
    }
  }

  // 遇到指定标志结束扫描，返回标志之前的文字
  scanUntil(stopTag) {
    // 开始循环前的pos的值
    var pos_backup = this.pos
    // 没有遇到stopTag前一直遍历
    while (this.tail.indexOf(stopTag) != 0 && !this.isEnd()) {
      this.pos++
      this.tail = this.templateStr.substr(this.pos)
    }
    // 获取结束标志之前的文字
    return this.templateStr.substring(pos_backup, this.pos)
  }

  isEnd() {
    return this.pos >= this.templateStr.length
  }
}
